package modelo.Tests;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import modelo.AlgoHero.Compas;
import modelo.AlgoHero.CompasTraducido;
import modelo.AlgoHero.Partitura;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

import junit.framework.TestCase;

public class CompasTest extends TestCase {

	private PartituraTest testPartitura;
	
	public CompasTest (){
		
		testPartitura = new PartituraTest ();
	}
	
	public Compas getCompas1 (){
		
		Partitura partitura1 = this.testPartitura.getPartitura1();
		Partitura partitura2 = this.testPartitura.getPartitura2();
		
		Compas compas = new Compas();
		
		compas.add(partitura1);
		compas.add(partitura2);
		
		return compas;
	}
	public Compas getCompas2 (){
		
		Partitura partitura1 = this.testPartitura.getPartitura1();
		Partitura partitura2 = this.testPartitura.getPartitura2();
		
		Compas compas = new Compas();
		
		compas.add(partitura1);
		compas.add(partitura2);
		compas.add(partitura2);
		
		return compas;
	}
	
	public CompasTraducido getCompasTraducido1 (){
		
		CompasTraducido compasTraducido = new CompasTraducido ();
		
		compasTraducido.add(this.testPartitura.getPartituraTraducida1());
		compasTraducido.add(this.testPartitura.getPartituraTraducida2());
				
		return compasTraducido;
		
	}
	
	public CompasTraducido getCompasTraducido2 (){
		
		CompasTraducido compasTraducido = new CompasTraducido ();
		
		compasTraducido.add(this.testPartitura.getPartituraTraducida1());
		compasTraducido.add(this.testPartitura.getPartituraTraducida2());
		compasTraducido.add(this.testPartitura.getPartituraTraducida2());
				
		return compasTraducido;
		
	}
	
	public Element crearNodo() throws ParserConfigurationException
	{
		  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		  DocumentBuilder db = dbf.newDocumentBuilder(); 
	   	  Document doc = db.newDocument();
	   	  Element elemento = doc.createElement("compas");	
	   	  Element elementoHijo = doc.createElement("partitura");
	   	  elemento.appendChild(elementoHijo);	   	  
	   	  return elemento;	   	
	}
	
	public void testComparacion(){
		
		CompasTraducido compasTraducido1 = this.getCompasTraducido1();
		CompasTraducido compasTraducido2 = this.getCompasTraducido1();
		
		assertTrue(compasTraducido1.compareTo(compasTraducido2));
	}

	public void testTraduccion (){
		
		CompasTraducido compasTraducido1;

		compasTraducido1 = (CompasTraducido) this.getCompas1().traducir();
		
		assertTrue(compasTraducido1.compareTo(this.getCompasTraducido1()));
		
	}
	
	public void testDeserialize () throws ParserConfigurationException{
		Element elemento = crearNodo();
		Compas compas = new Compas();
		compas.Deserialize(elemento);
		assertTrue(!(compas.isEmpty()));
	}
	

}
